---
title: |
    | Online Appendix to
    | '[Solar Panels and Political Attitudes](https://doi.org/10.1177%2F14789299211044868)'
author: ""
date: ""
output:
  pdf_document:
    fig_caption: yes
    keep_tex: yes
bibliography: references.bib
csl: apa.csl
fontsize: 12pt
link-citations: yes
linkcolor: black
urlcolor: black
header-includes:
    - \usepackage{booktabs,pdflscape,longtable}
    - \usepackage{setspace}\doublespacing
    - \hypersetup{pdftoolbar=true, pdfmenubar=true, pdffitwindow=false, pdfstartview={FitH}}
---

```{r setup, include=FALSE}

# global options
knitr::opts_chunk$set(echo=FALSE, include=FALSE, message=FALSE, warning=FALSE, dev = c("pdf", "png"),
                      dpi=1000, fig.width=9, fig.height=6, fig.path="../figures/", fig.align="center", cache=TRUE, cache.lazy = FALSE)

# packages and functions
library(rio)
library(tidyverse)
library(lfe)
library(stargazer)
library(kableExtra)
library(psych)
```

```{r data, include=FALSE}

df_deu <- import("data/deu_tidy.Rdata")
df_gbr <- import("data/gbr_tidy.Rdata")
df_che <- import("data/che_tidy.Rdata")

```

\renewcommand{\thepage}{A\arabic{page}}
\renewcommand*{\thetable}{A\arabic{table}}
\renewcommand*{\thefigure}{A\arabic{figure}}
\renewcommand{\thefootnote}{A\arabic{footnote}}

# Descriptive Statistics
\autoref{summary_table} presents the summary statistics, by survey wave, for all variables in the main text---except for *Region*, which is a categorical variable. The column *Original* lists the item names in the original datasets that I use to create the variables, for which I provide brief descriptions below. For further details, please see the documentation of the original datasets.


## Dependent Variables

*Political Interest*

* SOEP: 
    - Item: 'Generally speaking, how interested are you in politics?'
    - Note: The answer categories---'Very interested', 'Moderately interested', 'Not interested', and 'Disinterested'---are reverse coded so that higher values indicate increasing interest  (i.e., 'Disinterested' $=$ 1 ... 'Very interested' $=$ 4).

* UKHLS: 
    - Item: 'How interested would you say you are in politics?'
    - Note: The answer categories---'Very Interested', 'Fairly interested', 'Not very interested', and 'Not at all interested'---are reverse coded so that higher values indicate increasing interest (i.e., 'Not at all interested' $=$ 1 ... 'Very interested' $=$ 4).

* SHP:
    - Item: 'Generally, how interested are you in politics, if 0 means "not at all interested" and 10 "very interested"?'
    - Note: This variable has been rescaled to range from 1 to 4.

*Left-Right Position* 

* SOEP: 
    - Item: 'In politics, people often talk about "left" and "right" when describing different political views. When you think about your own political views, how would you rate them on the scale below? 0: far left, 10: far right.'

* SHP:
    - Item: 'When they talk about politics, people mention left and right. Personally, where do you position yourself, 0 means "left" and 10 "right"?'


*Trust in Government* 

* SHP: 
    - Item: 'How much confidence do you have in the federal government (in Bern), if 0 means "no confidence" and 10 means "full confidence"?'

*Party ID: Y/N* 

* SOEP: 
    - Item: 'Do you lean towards a particular party?'
    - Note: This variable is coded as 0 for 'No', as 1 for 'Yes'.

* UKHLS: 
    - Item: 'Generally speaking do you think of yourself as a supporter of any one political party?'
    - Note: This variable is coded as 0 for 'No', as 1 for 'Yes'.

* SHP: 
    - Item: 'Overall, do you feel close to any political party?'
    - Note: This variable is coded as 0 for 'No', as 1 for 'Yes'.
    
*Party ID: Strength* 

* SOEP: 
    - Item: 'To what extent?' 
    - Notes. First, the answer categories are reverse coded so that the higher values indicate increasing strength (i.e., 'Very weakly' $=$ 2 ... 'Very strongly' $=$ 6). Then, I have added the code 1 for respondents that do not support any party (i.e., *Party ID* $=$ 0).

* UKHLS: 
    - Item: 'Would you call yourself a very strong supporter of [the party that you support], fairly strong or not very strong?'
    - Notes: First, the answer categories are reverse coded so that the values indicate increasing strength (i.e., 'Not very strong' $=$ 2 ... 'Very strong' $=$ 4). Then, I have added the code 1 for respondents that do not support any party (i.e., *Party ID* $=$ 0).

* SHP: 
    - Item: 'Do you feel "very close" to this party, "quite close" or "not very close"?'
    - Notes: First, the answer categories are reverse coded so that the values indicate increasing strength (i.e., 'Not very close' $=$ 2 ... 'Very close' $=$ 4). Then, I have added the code 1 for respondents that do not support any party (i.e., *Party ID* $=$ 0).    

*Party ID: Greens* 

* SOEP: 
    - Item: 'Which party do you lean toward?'
    - Notes: This question is asked only if respondents support a party (i.e., *Party ID* $=$ 1). I code this variable as 1 if they support Alliance90/The Greens, and as 0 if (a) they do not support any party (i.e., *Party ID* $=$ 0) or (b) they support a party other than Alliance90/The Greens. A small number of respondents indicate more than one party. In such cases, I code this variable as 1 if one of these parties are Alliance90/The Greens.

* UKHLS: 
    - Item: 'Which political party do you support?'
    - Notes: This question is asked only if respondents support a party (i.e., *Party ID* $=$ 1). I code this variable as 1 if they support the Green Party, and as 0 if (a) they do not support any party (i.e., *Party ID* $=$ 0) or (b) they support a party other than the Green Party. 

* SHP: 
    - Item: 'Which party do you have in mind?'
    - Notes: This question is asked only if respondents support a party (i.e., *Party ID* $=$ 1). I code this variable as 1 if they support the Green Party of Switzerland, Socialist Green Alternative, or the Green Liberal Party of Switzerland, and as 0 if (a) they do not support any party (i.e., *Party ID* $=$ 0) or (b) they support a party other than the three green parties in Switzerland. 


## Independent Variable

*Solar Panel* 

* SOEP: 
    - Item: 'What amenities does your dwelling have?'
    - Note: This variable is coded as 1 if respondents indicated that their household have a 'Solar collector, solar energy system'. Otherwise it is coded as 0.

* UKHLS:
    - Items: 'Have you installed or are you seriously considering any of the following...';
'solar panels for electricity?', 'Solar water heating?'
    - Note: This variable is coded as 1 if respondents answered 'Yes --- fitted' to either of the questions above. Otherwise it is coded as 0.

* SHP: 
    - Item: 'Have you or your landlord done any larger modernizations in the flat since [month-year]? ... What kind of renovations have been made?'
    - Notes: 'month-year' refers either to the date the households were last surveyed in the previous year (for existing households) or to a date 12 months earlier (for new households). I have coded this variable as 0 if respondents replied 'No' to solar-panel modernisations. If they replied 'Yes', I have coded this variable as 1 for that survey wave *and* for any other wave that follows.


## Control Variables

*Education* 

* SOEP: 
    - Item: 'ISCED-1997-Classification'
    - Note: This variable ranges between 'In school' $=$ 0 to 'Higher education' $=$ 6. 

* UKHLS:
    - Item: 'Current status: highest educational or vocational qualification'
    - Note: This variable is reverse coded so that it ranges between 'No qualification' $=$ 1 and 'University degree' $=$ 6.

* SHP: 
    - Item: 'International standard classification of education ISCED 1997'
    - Note: This variable has been recoded to range between 'Not completed primary (compulsory) education' $=$ 0 to 'Second stage of tertiary education' $=$ 9. 


*Head of Household*

* SOEP: 
    - Item: 'Relationship to the head of household'
    - Note: This variable is coded as 1 for the answer category 'Head Of HH, Contact Person', as 0 for other household members.  

* UKHLS:
    - Items: 'Conventional head of household indicator' (Wave 2008-2009); 'Household reference person' (Waves 2009-2011 and 2012-2014). 
    - This variable is coded as 1 for respondents who are 'Head of household' (Wave 2008-2009) or 'Reference person' (Waves 2009-2011 and 2012-2014). Otherwise it is coded as 0. 

* SHP: 
    - Item: 'Relation to the person of reference'
    - Note: This variable is coded as 1 for 'Reference person', as 0 for other household members. 


*Unemployed* 

* SOEP: 
    - Item: 'Occupational status'
    - Note: This variable is coded as 1 if respondents are 'Unemployed, Not Employer'. Otherwise it is coded as 0.

* UKHLS: 
    - Item: 'Which of these best describes your current employment situation?'
    - Note: This variable is coded as 1 if respondents are 'Unemployed'. Otherwise it is coded as 0.
    
* SHP: 
    - Item: 'Working status'
    - Note: This variable is coded as 1 if respondents are 'Unemployed'. Otherwise it is coded as 0.

*Household Income*

* SOEP: 
    - Item: 'Monthly household net income' 

* UKHLS: 
    - Items: 'Annual household net income' (Wave 2008-2009); 'Monthly household net income' (Waves 2009-2011 and 2012-2014)
    - Note: For the Wave 2008-2009, I have divided the annual household net income into 12 so that all values refer to monthly income.
    
* SHP: 
    - Item: 'Yearly household income net'
    - Note: I have divided the original values into 12 so that all values refer to monthly income.

*Household with Children*

* SOEP: 
    - Item: 'Children under 16 years in household'
    - Note: This variable is coded as 1 if there are one or more children under 16 years in household. Otherwise it is coded as 0.

* UKHLS:  
    - Item: 'Number of children in household'
    - Note: This item counts the children aged 15 or under. I have coded this variable as 0 for households with no children. Otherwise it is coded as 1.
    
* SHP: 
    - Item: 'Number of children in household: 0 to 17 years'
    - Note: This variable is coded as 1 for households with one or more children. Otherwise it is coded as 0.

*House Owned*

* SOEP: 
    - Item: 'Tenant or owner of dwelling'
    - Note: This variable is coded as 1 for owners. Otherwise it is coded as 0.

* UKHLS: 
    - Item: 'Does your household own this accommodation outright, is it being bought with a mortgage, is it rented or does it come rent-free?'
    - Note: This variable is coded as 1 for properties that are owned, owned with mortgage, or those that involve shared ownership. Otherwise it is coded as 0. 
* SHP: 
    - Item: 'Are you, or another person living in your household, a tenant or owner of the accommodation you currently live in?' 
    - Note: This variable is coded as 1 for those indicating 'Owner/co-owner'. Otherwise it is coded as 0.

*Region* 

* SOEP: 
    - Item: 'NUTS-systematic-1 (federal state)'
    - Note: This is a categorical variable, with 16 levels. It refers to the *NUTS 1* regions of Germany.

* UKHLS: 
    - Item: 'Government office region'
    - Notes: This is a categorical variable, with 12 levels. It refers to the *NUTS 1* regions of the UK.
    
* SHP: 
    - Item: 'Region of residence'
    - Note: This is a categorical variable, with 7 levels. It refers to the *NUTS 2* regions of Switzerland.

\begin{landscape}
```{r descriptives, cache=TRUE, include=TRUE}

desc_deu <- df_deu %>%
  select(wave, interest_politics, support_party, support_amount, support_green, left_right,
         solar_panel, 
         education, head, unemployed, income, children, owner) %>% 
  group_by(wave) %>%
  mutate(id = 1:n()) %>%
  ungroup() %>%
  gather(temp, val, interest_politics:owner) %>%
  unite(temp1, wave, temp, sep = '_') %>%
  spread(temp1, val) %>%
  select(-id) %>%
  as.data.frame() %>%
  map(~.x) %>%
  discard(~all(is.na(.x))) %>%
  map_df(~.x) %>% 
  psych::describe() %>% 
  rownames_to_column() %>% 
  separate(rowname, c("wave", "my_var"), sep = "_", extra = "merge") %>% 
  mutate(my_var = factor(my_var, levels = c( 
                         "solar_panel",
                         "interest_politics", 
                         "left_right",  
                         "support_party",                           
                         "support_amount",
                         "support_green",
                         "education",
                         "head",
                         "unemployed",
                         "income",
                         "children",
                         "owner"
                         )),
         or_var = recode(my_var,
                         "solar_panel" = "hlf0035",
                         "interest_politics" = "plh0007", 
                         "left_right" = "plh0004", 
                         "support_party" = "plh0011_h",                           
                         "support_amount" = "plh0013_h",
                         "support_green" = "plh0012_h",
                         "education" = "pgisced97",    
                         "head" = "stell_h",
                         "unemployed" = "pgstib",
                         "income" = "hghinc",
                         "children" = "hlk0044",
                         "owner" = "hgowner"
                         ),
         my_var = recode(my_var,
                         "interest_politics" = "Political Interest",                              
                         "support_party" = "Party ID: Y/N",                           
                         "support_amount" = "Party ID: Strength",
                         "support_green" = "Party ID: Greens",
                         "left_right" = "Left-Right Position",                              
                         "solar_panel" = "Solar Panel",
                         "children" = "Children in Household",
                         "owner" = "House Owned",
                         "head" = "Head of Household",
                         "education" = "Education",
                         "income" = "Household Income",
                         "unemployed" = "Unemployed"),
         dataset = "SOEP",
         mean = round(mean, 2),
         sd = round(sd, 2)) %>% 
  select(dataset, my_var, wave, or_var, n, mean, sd, median, min, max) %>% 
  rename("Dataset" = "dataset", "Variable" = "my_var", "Wave" = "wave", "Origin" = "or_var",
         "N" = "n", "Mean" = "mean", "SD" = "sd", "Median" = "median",
         "Min" = "min", "Max" = "max") %>% 
  arrange(Variable, Wave)



desc_gbr <- df_gbr %>%
  select(wave, interest_politics, support_party, support_amount, support_green,
         solar_panel, 
         education, head, unemployed, income, children, owner) %>% 
  group_by(wave) %>%
  mutate(id = 1:n()) %>%
  ungroup() %>%
  gather(temp, val, interest_politics:owner) %>%
  unite(temp1, wave, temp, sep = '_') %>%
  spread(temp1, val) %>%
  select(-id) %>%
  as.data.frame() %>%
  map(~.x) %>%
  discard(~all(is.na(.x))) %>%
  map_df(~.x) %>% 
  psych::describe() %>% 
  rownames_to_column() %>% 
  separate(rowname, c("wave", "my_var"), sep = "_", extra = "merge") %>% 
  mutate(my_var = factor(my_var, levels = c( 
                         "solar_panel",
                         "interest_politics", 
                         "support_party",                           
                         "support_amount",
                         "support_green",
                         "education",
                         "head",
                         "unemployed",
                         "income",
                         "children",
                         "owner"
                         )),
    or_var = case_when(my_var == "interest_politics" & wave == 2008 ~ "br_vote6",                              
                       my_var == "support_party" & wave == 2008 ~ "br_vote1",                           
                       my_var == "support_amount" & wave == 2008 ~ "br_vote5",
                       my_var == "support_green" & wave == 2008 ~ "br_vote4",
                       my_var == "solar_panel" & wave == 2008 ~ "br_solar1/2",
                       my_var == "education" & wave == 2008 ~ "br_hiqualb_dv",
                       my_var == "head" & wave == 2008 ~ "br_hoh",      
                       my_var == "unemployed" & wave == 2008 ~ "br_jbstat",
                       my_var == "income" & wave == 2008 ~ "br_hhyneti",
                       my_var == "children" & wave == 2008 ~ "br_nkids_dv",
                       my_var == "owner" & wave == 2008 ~ "br_hsownd_bh",

                       my_var == "interest_politics" & wave == 2009 ~ "a_vote6",                              
                       my_var == "support_party" & wave == 2009 ~ "a_vote1",                           
                       my_var == "support_amount" & wave == 2009 ~ "a_vote5",
                       my_var == "support_green" & wave == 2009 ~ "a_vote4",
                       my_var == "solar_panel" & wave == 2009 ~ "a_solar1/2",
                       my_var == "education" & wave == 2009 ~ "a_hiqualb_dv",
                       my_var == "head" & wave == 2009 ~ "a_hrpid",
                       my_var == "unemployed" & wave == 2009 ~ "a_jbstat",
                       my_var == "income" & wave == 2009 ~ "a_fihhmnnet1_dv",
                       my_var == "children" & wave == 2009 ~ "a_nkids_dv",
                       my_var == "owner" & wave == 2009 ~ "a_hsownd_bh",
                       
                       my_var == "interest_politics" & wave == 2012 ~ "d_vote6",                              
                       my_var == "support_party" & wave == 2012 ~ "d_vote1",                           
                       my_var == "support_amount" & wave == 2012 ~ "d_vote5",
                       my_var == "support_green" & wave == 2012 ~ "d_vote4",
                       my_var == "solar_panel" & wave == 2012 ~ "d_solar1/2",
                       my_var == "education" & wave == 2012 ~ "d_hiqualb_dv",
                       my_var == "head" & wave == 2012 ~ "d_hrpid",
                       my_var == "unemployed" & wave == 2012 ~ "d_jbstat",                       
                       my_var == "income" & wave == 2012 ~ "d_fihhmnnet1_dv",
                       my_var == "children" & wave == 2012 ~ "d_nkids_dv",
                       my_var == "owner" & wave == 2012 ~ "d_hsownd_bh"
                       ),
    my_var = recode(my_var,
                    "interest_politics" = "Political Interest",                              
                    "support_party" = "Party ID: Y/N",                           
                    "support_amount" = "Party Id: Strength",
                    "support_green" = "Party ID: Greens",
                    "solar_panel" = "Solar Panel",
                    "education" = "Education",
                    "head" = "Head of Household",
                    "unemployed" = "Unemployed",
                    "income" = "Household Income",                    
                    "children" = "Children in Household",
                    "owner" = "House Owned"
                    ),
    dataset = "UKLHS",
    mean = round(mean, 2),
    sd = round(sd, 2), 
    wave = recode(wave, `2008` = "2008-2009", `2009` = "2009-2011", `2012` = "2012-2014")) %>% 
  select(dataset, my_var, wave, or_var, n, mean, sd, median, min, max) %>% 
  rename("Dataset" = "dataset", "Variable" = "my_var", "Wave" = "wave", "Origin" = "or_var",
         "N" = "n", "Mean" = "mean", "SD" = "sd", "Median" = "median",
         "Min" = "min", "Max" = "max") %>% 
  arrange(Variable, Wave)

desc_che <- df_che %>%
  select(wave, interest_politics, support_party, support_amount, support_green, left_right, trust_government,
         solar_panel, 
         education, head, unemployed, income, children, owner) %>% 
  group_by(wave) %>%
  mutate(id = 1:n()) %>%
  ungroup() %>%
  gather(temp, val, interest_politics:owner) %>%
  unite(temp1, wave, temp, sep = '_') %>%
  spread(temp1, val) %>%
  select(-id) %>%
  as.data.frame() %>%
  map(~.x) %>%
  discard(~all(is.na(.x))) %>%
  map_df(~.x) %>% 
  psych::describe() %>% 
  rownames_to_column() %>% 
  separate(rowname, c("wave", "my_var"), sep = "_", extra = "merge") %>% 
  mutate(my_var = factor(my_var, levels = c( 
         "solar_panel",
         "interest_politics", 
         "left_right",
         "trust_government", 
         "support_party",  
         "support_amount", 
         "support_green",
         "education",
         "head",        
         "unemployed",
         "income",
         "children",
         "owner"
        )),
    or_var = case_when(my_var == "interest_politics" & wave == 2013 ~ "p13p01",
                       my_var == "left_right" & wave == 2013 ~ "p13p10",
                       my_var == "support_party" & wave == 2013 ~ "p13p66",
                       my_var == "support_amount" & wave == 2013 ~ "p13p68",
                       my_var == "support_green" & wave == 2013 ~ "p13p67",
                       my_var == "solar_panel" & wave == 2013 ~ "h13h44",
                       my_var == "education" & wave == 2013 ~ "isced13",
                       my_var == "head" & wave == 2013 ~ "relarp13",
                       my_var == "owner" & wave == 2013 ~ "h13h29",
                       my_var == "unemployed" & wave == 2013 ~ "wstat13",
                       my_var == "income" & wave == 2013 ~ "i13htyn",
                       my_var == "children" & wave == 2013 ~ "nbkid13",

                       
                       my_var == "interest_politics" & wave == 2014 ~ "p14p01",
                       my_var == "left_right" & wave == 2014 ~ "p14p10",
                       my_var == "trust_government" & wave == 2014 ~ "p14p04",                       
                       my_var == "support_party" & wave == 2014 ~ "p14p66",
                       my_var == "support_amount" & wave == 2014 ~ "p14p68",
                       my_var == "support_green" & wave == 2014 ~ "p14p67",
                       my_var == "solar_panel" & wave == 2014 ~ "h14h44",
                       my_var == "education" & wave == 2014 ~ "isced14",
                       my_var == "head" & wave == 2014 ~ "relarp14",
                       my_var == "unemployed" & wave == 2014 ~ "wstat14",
                       my_var == "income" & wave == 2014 ~ "i14htyn",
                       my_var == "children" & wave == 2014 ~ "nbkid14",
                       my_var == "owner" & wave == 2014 ~ "h14h29",
                       
                       my_var == "interest_politics" & wave == 2015 ~ "p15p01",
                       my_var == "left_right" & wave == 2015 ~ "p15p10",
                       my_var == "support_party" & wave == 2015 ~ "p15p66",
                       my_var == "support_amount" & wave == 2015 ~ "p15p68",
                       my_var == "support_green" & wave == 2015 ~ "p15p67",
                       my_var == "solar_panel" & wave == 2015 ~ "h15h44",
                       my_var == "education" & wave == 2015 ~ "isced15",
                       my_var == "head" & wave == 2015 ~ "relarp15",
                       my_var == "unemployed" & wave == 2015 ~ "wstat15",
                       my_var == "income" & wave == 2015 ~ "i15htyn",
                       my_var == "children" & wave == 2015 ~ "nbkid15",
                       my_var == "owner" & wave == 2015 ~ "h15h29",
                       
                       my_var == "interest_politics" & wave == 2016 ~ "p16p01",
                       my_var == "left_right" & wave == 2016 ~ "p16p10",
                       my_var == "support_party" & wave == 2016 ~ "p16p66",
                       my_var == "support_amount" & wave == 2016 ~ "p16p68",
                       my_var == "support_green" & wave == 2016 ~ "p16p67",
                       my_var == "solar_panel" & wave == 2016 ~ "h16h44",
                       my_var == "education" & wave == 2016 ~ "isced16",
                       my_var == "head" & wave == 2016 ~ "relarp16",
                       my_var == "unemployed" & wave == 2016 ~ "wstat16",
                       my_var == "income" & wave == 2016 ~ "i16htyn",
                       my_var == "children" & wave == 2016 ~ "nbkid16",
                       my_var == "owner" & wave == 2016 ~ "h16h29",
                       
                       my_var == "interest_politics" & wave == 2017 ~ "p17p01",
                       my_var == "left_right" & wave == 2017 ~ "p17p10",
                       my_var == "trust_government" & wave == 2017 ~ "p17p04",
                       my_var == "support_party" & wave == 2017 ~ "p17p66",
                       my_var == "support_amount" & wave == 2017 ~ "p17p68",
                       my_var == "support_green" & wave == 2017 ~ "p17p67",
                       my_var == "solar_panel" & wave == 2017 ~ "h17h44",
                       my_var == "education" & wave == 2017 ~ "isced17",
                       my_var == "head" & wave == 2017 ~ "relarp17",
                       my_var == "unemployed" & wave == 2017 ~ "wstat17",
                       my_var == "income" & wave == 2017 ~ "i17htyn",
                       my_var == "children" & wave == 2017 ~ "nbkid17",
                       my_var == "owner" & wave == 2017 ~ "h17h29",
                       
                       my_var == "interest_politics" & wave == 2018 ~ "p18p01",
                       my_var == "left_right" & wave == 2018 ~ "p18p10",
                       my_var == "support_party" & wave == 2018 ~ "p18p66",
                       my_var == "support_amount" & wave == 2018 ~ "p18p68",
                       my_var == "support_green" & wave == 2018 ~ "p18p67",
                       my_var == "solar_panel" & wave == 2018 ~ "h18h44",
                       my_var == "education" & wave == 2018 ~ "isced18",
                       my_var == "head" & wave == 2018 ~ "relarp18",
                       my_var == "unemployed" & wave == 2018 ~ "wstat18",
                       my_var == "income" & wave == 2018 ~ "i18htyn",
                       my_var == "children" & wave == 2018 ~ "nbkid18",
                       my_var == "owner" & wave == 2018 ~ "h18h29"
                       ),
    my_var = recode(my_var,
                    "interest_politics" = "Political Interest",   
                    "left_right" = "Left-Right Position",
                    "trust_government" = "Trust in Government",
                    "support_party" = "Party ID: Y/N", 
                    "support_amount" = "Party ID: Strength", 
                    "support_green" = "Party ID: Greens",
                    "solar_panel" = "Solar Panel",
                    "education" = "Education",                    
                    "head" = "Head of Household",
                    "unemployed" = "Unemployed",
                    "income" = "Household Income",                    
                    "children" = "Children in Household",
                    "owner" = "House Owned"
                    ),
    dataset = "SHP",
    mean = round(mean, 2),
    sd = round(sd, 2),
    median = round(median, 2),
    min = round(min, 2),
    max = round(max, 2)) %>% 
  select(dataset, my_var, wave, or_var, n, mean, sd, median, min, max) %>% 
  rename("Dataset" = "dataset", "Variable" = "my_var", "Wave" = "wave", "Origin" = "or_var",
         "N" = "n", "Mean" = "mean", "SD" = "sd", "Median" = "median",
         "Min" = "min", "Max" = "max") %>% 
  arrange(Variable, Wave)

df.desc <- rbind(desc_deu, desc_gbr, desc_che)

kable(df.desc, "latex", longtable = T, 
      booktabs = T, caption = "Summary Statistics by Survey Wave \\label{summary_table}") %>%
      kable_styling(latex_options = c("repeat_header", "striped"), repeat_header_method = "replace",
                    repeat_header_text = "Summary Statistics by Survey Wave (\\textit{continued})", 
                    font_size = 10)

```
\end{landscape}


# Robustness Checks


## Subgroups: House Owners and Heads of Households

```{r owner, include=TRUE, cache=TRUE, results="asis"}

m10 <- felm(interest_politics ~ solar_panel + owner + solar_panel:owner | 0 | 0 | h_id + p_id, data = df_deu)
                
m11 <- felm(interest_politics ~ solar_panel + owner + solar_panel:owner | p_id + wave | 0 | h_id, data = df_deu)

m12 <- felm(interest_politics ~ solar_panel + solar_panel:owner +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_deu)

m13 <- felm(interest_politics ~ solar_panel + owner + solar_panel:owner | 0 | 0 | h_id + p_id, data = df_gbr)
                
m14 <- felm(interest_politics ~ solar_panel + owner + solar_panel:owner | p_id + wave | 0 | h_id, data = df_gbr)

m15 <- felm(interest_politics ~ solar_panel + solar_panel:owner +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_gbr)

m16 <- felm(interest_politics ~ solar_panel + owner + solar_panel:owner | 0 | 0 | h_id + p_id, data = df_che)
                
m17 <- felm(interest_politics ~ solar_panel + owner + solar_panel:owner | p_id + wave | 0 | h_id, data = df_che)

m18 <- felm(interest_politics ~ solar_panel + solar_panel:owner +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_che)


capture.output({

stargazer(m10, m11, m12, m13, m14, m15, m16, m17, m18,
          type = "latex",
          title = "Models of political interest---interaction with \\textit{House Owned}",
          keep = c("solar_panel", "owner", "solar_panel:owner"),
          covariate.labels = c("Solar Panel (SP)", "House Owned (HO)" , "SP x HO"),
          add.lines = list(c("FEs---Individuals", "No", "Yes", "Yes", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("FEs---Waves", "No", "Yes", "Yes", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("Controls", "No", "No", "Yes", "No", "No", "Yes", "No", "No", "Yes"),
                           c("Cl. SEs---Individuals", "Yes", "No", "No", "Yes", "No", "No", "Yes", "No", "No"),
                           c("Cl. SEs---Households", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes")),
          omit.stat = "ser",
          star.cutoffs = c(0.05, 0.01, 0.001),
          dep.var.caption = "", dep.var.labels.include = FALSE,
          header = FALSE, label = "owner_table", digits = 2,
          column.labels = c("Germany (1 - 3)", "United Kingdom (4 - 6)", "Switzerland (7 - 9)"),
          column.separate = c(3, 3, 3),
          notes.append = FALSE, notes.align = "r", no.space = TRUE,
          notes = "\\parbox[t]{0.9\\columnwidth}{\\textit{Notes:} Standard errors are in parentheses. Control variables include education, head of households, unemployment, household income, households with children, house owners, and geographical regions. * p < 0.05, ** p < 0.01, *** p < 0.001.}",
          font.size = "small", table.placement="!ht",
          column.sep.width = "-4pt")
  }) %>%
  { gsub("\\textit{Note:}  & ", "", ., fixed = TRUE) } %>%
  { gsub("{Switzerland (7 - 9)} \\\\", "{Switzerland (7 - 9)} \\\\ \\cmidrule(lr){2-4} \\cmidrule(lr){5-7} \\cmidrule(lr){8-10}", ., fixed = TRUE) } %>%
  cat()
```

Would the null results change if we analyse relevant subgroups, such as those who live in a house that they own or those who are heads of households? These groups of individuals are more likely to benefit, and therefore be affected, from living in a house with solar installations. To explore the possibility that the results might be heterogeneous with regard to these factors, I estimate interactions effects, between *Solar Panel* and *House Owner* (\autoref{owner_table}) and between *Solar Panel* and *Head of Household* (\autoref{head_table}), for each of the three models in Table 1.

The results show no signs of heterogeneity, with the interaction terms returning substantively and statistically insignificant estimates in all models. This suggests that the null results continue to hold if we limit the analysis to house owners or tenants, heads or other members of households. 

```{r head, include=TRUE, cache=TRUE, results="asis"}

m19 <- felm(interest_politics ~ solar_panel + head + solar_panel:head | 0 | 0 | h_id + p_id, data = df_deu)
                
m20 <- felm(interest_politics ~ solar_panel + head + solar_panel:head | p_id + wave | 0 | h_id, data = df_deu)

m21 <- felm(interest_politics ~ solar_panel + solar_panel:head +
           education + head + unemployed + income + children + head + region
           | p_id + wave | 0 | h_id, data = df_deu)

m22 <- felm(interest_politics ~ solar_panel + head + solar_panel:head | 0 | 0 | h_id + p_id, data = df_gbr)
                
m23 <- felm(interest_politics ~ solar_panel + head + solar_panel:head | p_id + wave | 0 | h_id, data = df_gbr)

m24 <- felm(interest_politics ~ solar_panel + solar_panel:head +
           education + head + unemployed + income + children + head + region
           | p_id + wave | 0 | h_id, data = df_gbr)

m25 <- felm(interest_politics ~ solar_panel + head + solar_panel:head | 0 | 0 | h_id + p_id, data = df_che)
                
m26 <- felm(interest_politics ~ solar_panel + head + solar_panel:head | p_id + wave | 0 | h_id, data = df_che)

m27 <- felm(interest_politics ~ solar_panel + solar_panel:head +
           education + head + unemployed + income + children + head + region
           | p_id + wave | 0 | h_id, data = df_che)

capture.output({
  
stargazer(m19, m20, m21, m22, m23, m24, m25, m26, m27, 
          type = "latex",
          title = "Models of political interest---interaction with \\textit{Head of Household}",
          keep = c("solar_panel", "head", "solar_panel:head"),
          covariate.labels = c("Solar Panel (SP)", "Head of Household (HH)" , "SP x HH"),
          add.lines = list(c("FEs---Individuals", "No", "Yes", "Yes", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("FEs---Waves", "No", "Yes", "Yes", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("Controls", "No", "No", "Yes", "No", "No", "Yes", "No", "No", "Yes"),
                           c("Cl. SEs---Individuals", "Yes", "No", "No", "Yes", "No", "No", "Yes", "No", "No"),
                           c("Cl. SEs---Households", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes")),
          omit.stat = "ser",
          star.cutoffs = c(0.05, 0.01, 0.001),
          dep.var.caption = "", dep.var.labels.include = FALSE,
          header = FALSE, label = "head_table", digits = 2,
          column.labels = c("Germany (1 - 3)", "United Kingdom (4 - 6)", "Switzerland (7 - 9)"),
          column.separate = c(3, 3, 3),
          notes.append = FALSE, notes.align = "r", no.space = TRUE,
          notes = "\\parbox[t]{0.9\\columnwidth}{\\textit{Notes:} Standard errors are in parentheses. Control variables include education, head of households, unemployment, household income, households with children, house owners, and geographical regions. * p < 0.05, ** p < 0.01, *** p < 0.001.}",
          font.size = "small", table.placement="!ht",
          column.sep.width = "-4pt")
  }) %>%
  { gsub("\\textit{Note:}  & ", "", ., fixed = TRUE) } %>%
  { gsub("{Switzerland (7 - 9)} \\\\", "{Switzerland (7 - 9)} \\\\ \\cmidrule(lr){2-4} \\cmidrule(lr){5-7} \\cmidrule(lr){8-10}", ., fixed = TRUE) } %>%
  cat()
                
```


\newpage
## Solar System Types

There are two main types of solar systems: solar photovoltaic (PV) and solar thermal (ST). PV systems produce electricity, which can be consumed in the dwelling and/or fed back into the electricity grid for compensation from the utility. In comparison, ST systems turn sunlight into heat, providing warm water or space heating for the dwelling. It is also possible to have both systems on the same rooftop. 

One concern is that the effects of solar systems might be heterogeneous, depending on the type of solar systems that households have on their rooftop perhaps because they generate different amounts of revenues. For example, @jacksohn2019 show that, in Germany, PV systems used to generate almost twice as much revenue for households than ST systems in 2008, but this has been reversed in the recent years.

While the information on the type of solar systems is available for all three UKLHS waves used for the analysis, it is only available for the 2015 and 2016 waves in the SOEP. For SHP, this information is not available at all. Nevertheless, I repeat the models in Table 1 with the data available, differentiating between the types of solar systems. The results, as presented in \autoref{type_table}, are similar: those who live in households with solar installations are significantly more interested in politics (Models 3 and 6), irrespective of the solar system type. However, these effects disappear with the fixed-effects: if we limit the analysis to within persons, and remove any changes common to all individuals from one survey wave to another, there is no meaningful effect of solar panels on political interest (Models, 2, 3, 4, and 6).   

```{r type_table, include=TRUE, cache=TRUE, results="asis"}

df_deu_type <- df_deu %>% 
  mutate(type_solar = case_when(solar_panel == 0 ~ "no solar",
                               solar_pv == 1 & solar_st == 0 ~ "pv",
                               solar_pv == 0 & solar_st == 1 ~ "st",
                               solar_pv == 1 & solar_st == 1 ~ "pvst"),
         type_solar = factor(type_solar, levels = c("no solar", "pv", "st", "pvst")))

df_gbr_type <- df_gbr %>% 
  mutate(type_solar = case_when(solar_panel == 0 ~ "no solar",
                               solar_pv == 1 & solar_st == 0 ~ "pv",
                               solar_pv == 0 & solar_st == 1 ~ "st",
                               solar_pv == 1 & solar_st == 1 ~ "pvst"),
         type_solar = factor(type_solar, levels = c("no solar", "pv", "st", "pvst")))

m28 <- felm(interest_politics ~ type_solar | 0 | 0 | h_id + p_id, data = df_deu_type)
                
m29 <- felm(interest_politics ~ type_solar | p_id + wave | 0 | h_id, data = df_deu_type)

m30 <- felm(interest_politics ~ type_solar +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_deu_type)

m31 <- felm(interest_politics ~ type_solar | 0 | 0 | h_id + p_id, data = df_gbr_type)
                
m32 <- felm(interest_politics ~ type_solar | p_id + wave | 0 | h_id, data = df_gbr_type)

m33 <- felm(interest_politics ~ type_solar +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_gbr_type)


capture.output({

stargazer(m28, m29, m30, m31, m32, m33,
          type = "latex",
          title = "Effect of different types of solar systems on political attitudes",
          keep = c("type_solarpv", "type_solarst", "type_solarpvst"),
          covariate.labels = c("PV", "ST", "PV and ST"),
          add.lines = list(c("FEs---Individuals", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("FEs---Waves", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("Controls", "No", "No", "Yes", "No", "No", "Yes"),
                           c("Cl. SEs---Individuals", "Yes", "No", "No", "Yes", "No", "No"),
                           c("Cl. SEs---Households", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes")),
          omit.stat = "ser",
          star.cutoffs = c(0.05, 0.01, 0.001),
          dep.var.caption = "", dep.var.labels.include = FALSE,
          header = FALSE, label = "type_table", digits = 2,
          column.labels = c("Germany (1 - 3)", "United Kingdom (4 - 6)"),
          column.separate = c(3, 3),
          notes.append = FALSE, notes.align = "r", no.space = TRUE,
          notes = "\\parbox[t]{0.8\\columnwidth}{\\textit{Notes:} Standard errors are in parentheses. Control variables include education, head of households, unemployment, household income, households with children, house owners, and geographical regions. * p < 0.05, ** p < 0.01, *** p < 0.001.}",
          font.size = "small", table.placement="!ht")
  }) %>%
  { gsub("\\textit{Note:}  & ", "", ., fixed = TRUE) } %>%
  { gsub("{United Kingdom (4 - 6)} \\\\", "{United Kingdom (4 - 6)} \\\\ \\cmidrule(lr){2-4} \\cmidrule(lr){5-7}", ., fixed = TRUE) } %>%
  cat()
                
```


\newpage
## Environmental Attitudes

Does solar panel ownership affect environmental attitudes? There is a mounting evidence [see the literature review by @nilsson2017] that engaging in one environmental behaviour can have spillover effects, negative or positive. On the one hand, producing renewable energy with their solar panels, people might feel that they are personally contributing to the fight against climate change, and therefore worry less about the environment. On the other hand, committing themselves to this fight, the cognitive dissonance theory [@festinger1957] would predict that they might be even more concerned than before.

I test whether solar panels affect environmental attitudes with data from the SOEP, which measures how worried the respondents are about the environment and the consequences from climate change. Both variables are measured with a three-point scale as 1 $=$ *Very Concerned*, 2 $=$ *Somewhat Concerned*, and 3 $=$ *Not Concerned At All*. I have reversed coded this variable so that the higher values indicate increasing concern, and re-run the models in Table 1 with these two concerns as the dependent variables.

\autoref{environmental_table} presents the regression models, returning results similar to those in the main text. The coefficient is positive and significant in the pooled model, but this significance disappears in the fixed-effect models. This suggests that those who are more concerned about the environment or climate change are more likely to adopt solar panels, but the solar panels alone do not cause a significant change in these environmental attitudes. 

```{r environmental_table, include=TRUE, cache=TRUE, results="asis"}

m34 <- felm(worry_environment ~ solar_panel | 0 | 0 | h_id + p_id, data = df_deu)
                
m35 <- felm(worry_environment ~ solar_panel | p_id + wave | 0 | h_id, data = df_deu)

m36 <- felm(worry_environment ~ solar_panel +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_deu)

m37 <- felm(worry_climate ~ solar_panel | 0 | 0 | h_id + p_id, data = df_deu)
                
m38 <- felm(worry_climate ~ solar_panel | p_id + wave | 0 | h_id, data = df_deu)

m39 <- felm(worry_climate ~ solar_panel +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_deu)


capture.output({

stargazer(m34, m35, m36, m37, m38, m39,
          type = "latex",
          title = "Effect of solar system ownership on environmental attitudes",
          keep = "solar_panel",
          covariate.labels = "Solar Panel",
          add.lines = list(c("FEs---Individuals", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("FEs---Waves", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("Controls", "No", "No", "Yes", "No", "No", "Yes"),
                           c("Cl. SEs---Individuals", "Yes", "No", "No", "Yes", "No", "No"),
                           c("Cl. SEs---Households", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes")),
          omit.stat = "ser",
          star.cutoffs = c(0.05, 0.01, 0.001),
          dep.var.caption = "", dep.var.labels.include = FALSE,
          header = FALSE, label = "environmental_table", digits = 2,
          column.labels = c("Worry: Environment (1 - 3)", "Worry: Climate Change (4 - 6)"),
          column.separate = c(3, 3),
          notes.append = FALSE, notes.align = "r", no.space = TRUE,
          notes = "\\parbox[t]{0.8\\columnwidth}{\\textit{Notes:} Standard errors are in parentheses. Control variables include education, head of households, unemployment, household income, households with children, house owners, and geographical regions. * p < 0.05, ** p < 0.01, *** p < 0.001.}",
          font.size = "small", table.placement="!ht")
  }) %>%
  { gsub("\\textit{Note:}  & ", "", ., fixed = TRUE) } %>%
  { gsub("{Worry: Climate Change (4 - 6)} \\\\", "{Worry: Climate Change (4 - 6)} \\\\ \\cmidrule(lr){2-4} \\cmidrule(lr){5-7}", ., fixed = TRUE) } %>%
  cat()
                
```


\newpage
## Voting Intentions

Existing evidence suggests that, overall, policy feedback effects are stronger for political participation than for political attitudes [@campbell2012; @larsen2019]. Accordingly, if there is any effect of solar panels on owners, we might be more likely to find it in, for example, owners' likelihood to vote rather than their interest in politics, or their likelihood to vote for green parties rather than their identification with these parties.

To test whether solar panels affect participation, I use the SHP item that measures voting intention. Specifically, it asks 'If there was an election for the National Council tomorrow, for which party would you vote?'. I code *Electoral Turnout* as 0 if respondents indicated that they 'Wouldn't vote' or would vote 'For no party'. Otherwise, it is coded as 1. Similarly, I code *Vote: Greens* as 1 if they indicated the Green Party of Switzerland, Socialist Green Alternative, or the Green Liberal Party of Switzerland as their intended vote choice, and as 0 if they indicated a party other than these three parties.

\autoref{behaviour_table} presents the regression models, returning results similar to those reported in the main text: The best estimates are substantively and statistically insignificant. In other words, solar panel ownership does not seem to have a meaningful effect on voting intentions either.

```{r behaviour_table, include=TRUE, results="asis"}

m40 <- felm(vote_turnout ~ solar_panel | 0 | 0 | h_id + p_id, data = df_che)
                
m41 <- felm(vote_turnout ~ solar_panel | p_id + wave | 0 | h_id, data = df_che)

m42 <- felm(vote_turnout ~ solar_panel +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_che)

m43 <- felm(vote_green ~ solar_panel | 0 | 0 | h_id + p_id, data = df_che)
                
m44 <- felm(vote_green ~ solar_panel | p_id + wave | 0 | h_id, data = df_che)

m45 <- felm(vote_green ~ solar_panel +
           education + head + unemployed + income + children + owner + region
           | p_id + wave | 0 | h_id, data = df_che)


capture.output({

stargazer(m40, m41, m42, m43, m44, m45,
          type = "latex",
          title = "Effect of solar system ownership on intended voting behaviour",
          keep = "solar_panel",
          covariate.labels = "Solar Panel",
          add.lines = list(c("FEs---Individuals", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("FEs---Waves", "No", "Yes", "Yes", "No", "Yes", "Yes"),
                           c("Controls", "No", "No", "Yes", "No", "No", "Yes"),
                           c("Cl. SEs---Individuals", "Yes", "No", "No", "Yes", "No", "No"),
                           c("Cl. SEs---Households", "Yes", "Yes", "Yes", "Yes", "Yes", "Yes")),
          omit.stat = "ser",
          star.cutoffs = c(0.05, 0.01, 0.001),
          dep.var.caption = "", dep.var.labels.include = FALSE,
          header = FALSE, label = "behaviour_table", digits = 2,
          column.labels = c("Electoral Turnout (1 - 3)", "Vote: Greens (4 - 6)"),
          column.separate = c(3, 3),
          notes.append = FALSE, notes.align = "r", no.space = TRUE,
          notes = "\\parbox[t]{0.8\\columnwidth}{\\textit{Notes:} Standard errors are in parentheses. Control variables include education, head of households, unemployment, household income, households with children, house owners, and geographical regions. * p < 0.05, ** p < 0.01, *** p < 0.001.}",
          font.size = "small", table.placement="!ht")
  }) %>%
  { gsub("\\textit{Note:}  & ", "", ., fixed = TRUE) } %>%
  { gsub("{Vote: Greens (4 - 6)} \\\\", "{Vote: Greens (4 - 6)} \\\\ \\cmidrule(lr){2-4} \\cmidrule(lr){5-7}", ., fixed = TRUE) } %>%
  cat()
                
```
           
\newpage
# References
